home *** CD-ROM | disk | FTP | other *** search
- #include <MacTCPCommonTypes.h>
- #include <AddressXLation.h>
- #include <CvtAddr.h>
- #include <string.h>
-
-
- pascal void DNRResultProc(struct hostInfo *hInfoPtr, char *userDataPtr);
-
- /* ConvertStringToAddr is a simple call to get a host's IP number, given the name
- of the host.
- */
-
- void WaitForDone(char *done);
- integer MainEvents(integer evtMask);
- void RunBackground(void);
-
- void WaitForDone(char *done)
- {
- extern Boolean Quitable;
- extern Boolean noMenus;
- extern Boolean haveWaitEvnt;
- extern RgnHandle cursRgn;
- Boolean quit_back = Quitable;
- EventRecord event;
-
- noMenus = TRUE;
- Quitable = FALSE;
-
- while (!(*done))
- {
- if ( !EventAvail(everyEvent, &event) )
- {
- if (haveWaitEvnt)
- WaitNextEvent(everyEvent, &event, GetCaretTime(), cursRgn);
- else
- SystemTask(); /* run drivers */
- }
- else
- MainEvents(everyEvent);
- RunBackground();
- }
- noMenus = FALSE;
- Quitable = quit_back;
- }
-
- OSErr ConvertStringToAddr(char *name, LongWord *netNum)
- {
- struct hostInfo hInfo;
- OSErr result;
- Byte *p = (Byte*)netNum;
- integer h1, h2, h3, h4;
- char done = FALSE;
- extern Boolean gCancel;
-
- if ((result = OpenResolver(NIL)) == noErr)
- {
- result = StrToAddr(name, &hInfo, DNRResultProc, &done);
- if (result == cacheFault)
- WaitForDone(&done); /* wait for cache fault resolver to be called by interrupt */
- CloseResolver();
- if ((hInfo.rtnCode == noErr) || (hInfo.rtnCode == cacheFault))
- {
- *netNum = hInfo.addr[0];
- strcpy(name, hInfo.cname);
- name[strlen(name)-1] = '\0';
- return noErr;
- }
- }
- else
- {
- if (sscanf(name, "%d.%d.%d.%d", &h1, &h2, &h3, &h4) == 4)
- {
- p[0] = h1; p[1] = h2; p[2] = h3; p[3] = h4;
- return noErr;
- }
- }
-
- *netNum = 0;
-
- return result;
- }
-
-
- /* This is the completion routine used for name-resolver calls.
- It sets the userDataPtr flag to indicate the call has completed.
- */
-
- pascal void DNRResultProc(struct hostInfo *hInfoPtr,char *userDataPtr)
- {
- #pragma unused (hInfoPtr)
-
- *userDataPtr = 0xff; /* setting the use data to non-zero means we're done */
- }
-
- OSErr ConvertAddrToString(char *name, unsigned long netNum)
- {
- struct hostInfo hInfo;
- OSErr result;
- char done = FALSE;
- Byte *rh;
- extern Boolean gCancel;
-
- if ((result = OpenResolver(NIL)) == noErr)
- {
- result = AddrToName(netNum, &hInfo, DNRResultProc, &done);
- if (result == cacheFault)
- WaitForDone(&done); /* wait for cache fault resolver to be called by interrupt */
- CloseResolver();
- result = hInfo.rtnCode;
-
- if ((hInfo.rtnCode == noErr) || (hInfo.rtnCode == cacheFault))
- {
- strcpy(name, hInfo.cname);
- name[strlen(name)-1] = '\0';
- return noErr;
- }
- }
-
- rh = (Byte*)&netNum;
- sprintf(name, "%d.%d.%d.%d", rh[0], rh[1], rh[2], rh[3]);
-
- return result;
- }
-